package com.tbit.main.service;

import com.tbit.main.pojo.AccountUser;
import com.tbit.main.pojo.KVEntity;
import com.tbit.main.pojo.User;
import com.tbit.main.pojo.VO.UserVO;

import java.util.List;
import java.util.Map;

/**
 * 用户service
 *
 * @author Leon
 * 2019年11月13日 下午9:24:48
 */
public interface UserService {

    /**
     * 统计代理商有效免押会员数
     *
     * @param accountId
     * @param currentDate
     * @return
     */
    Integer getDepositUserCount(Integer accountId, String currentDate);

    /**
     * 统计品牌有效免押会员数
     *
     * @param accountId
     * @param currentDate
     * @return
     */
    Integer getDepositUserCountByAccountId(Integer accountId, String currentDate);

    /**
     * 统计运营区域批量有效免押会员数
     *
     * @param accountId
     * @param currentDate
     * @return
     */
    Integer getDepositUserCountByAccountIds(List<Integer> accountId, String currentDate);

    /**
     * 统计代理商用户总数
     *
     * @param accountId
     * @return
     */
    Integer getUserCount(Integer accountId);

    /**
     * 统计代理商集合用户总数
     *
     * @param accountId
     * @return
     */
    List<Map<String, Object>> getUserCountByAccountIds(List<Integer> accountId);

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    User getByUserId(Integer userId);


    /**
     * 根据手机号码查询
     *
     * @param accountId
     * @param phone
     * @return
     */
    User getByPhone(Integer accountId, String phone);

    /**
     * 性别统计
     *
     * @param accountId
     * @return
     */
    List<KVEntity> groupBySex(Integer accountId);

    /**
     * 年龄段统计
     *
     * @param accountId
     * @return
     */
    List<KVEntity> groupByAge(Integer accountId);

    /**
     * 查询用户总余额
     *
     * @param accountId
     * @return
     */
    String getUserMoneyCount(Integer accountId);

    /**
     * 根据运营区域批量查询用户总余额
     *
     * @param accountId
     * @return
     */
    String getUserMoneyCountByAccountId(List<Integer> accountId);

    /**
     * 押金用户总数和押金金额
     *
     * @param accountId
     * @return
     */
    KVEntity getUserDepositCount(Integer accountId);

    /**
     * 运营区域批量押金用户总数和押金金额
     *
     * @param accountId
     * @return
     */
    KVEntity getUserDepositCountByAccountId(List<Integer> accountId);

    /**
     * 获取品牌用户总数
     *
     * @param accountId
     * @return
     */
    Integer getBrandUserCount(Integer accountId);

    /**
     * 获取运营区域id批量查询用户总数
     *
     * @param accountId
     * @return
     */
    Integer getBrandUserCountByAccountIds(List<Integer> accountId);

    /**
     * 获取运营区域新增用户数
     *
     * @param accountId
     * @param startTime
     * @param endTime
     * @return
     */
    Integer newUser(Integer accountId, String startTime, String endTime);

    /**
     * 获取用户运营区域
     *
     * @param userId
     * @return
     */
    Integer getAccountIdByUserId(Integer userId);

    /**
     * 根据身份证查询
     *
     * @param accountId
     * @param IdNO
     * @return
     */
    List<User> getAccountIdIdNO(Integer accountId, String IdNO);

    /**
     * 查询用户
     *
     * @param userIds
     * @return
     */
    List<User> getUserIds(List<Integer> userIds);
    /**
     * 查询用户分页列表
     *
     * @param loginUser 用户登录信息
     * @param phone 手机号码
     * @param name 姓名
     * @param idNo 身份证号
     * @param rowCount 每页显示条数
     * @param pageNO 页码
     * @param nameAuth 认证状态
     * @param depositState 押金状态
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return List<User>
     */
    List<UserVO> queryPage(AccountUser loginUser, Integer userId, String phone, String name, String idNo, Integer rowCount,
                           Integer pageNO, Integer nameAuth, Integer depositState, Long startTime, Long endTime, Integer mapType);
}